#include <iostream>
#include <signal.h>
#include<unistd.h>
#include<wait.h>
#include<sys/types.h>
using namespace std;

#define NUM 10


pid_t id;
void hander(int signum)
{
    cout<<"捕获一个信号"<<signum<<"who:"<<getpid()<<endl;
    sleep(5);

    
    while(1)
    {
        pid_t res=waitpid(-1,NULL,WNOHANG);
        // 第一个参数 -1 表示函数应该等待任何子进程终止，而不管其进程 ID 如何。
        // 第二个参数 NULL 指定不返回关于已终止子进程的状态信息。
        // 第三个参数 WNOHANG 是一个选项标志，告诉 waitpid 如果没有已终止的子进程，则立即返回

        if(res>0)
        {
            cout<<"wait success,res:"<<res<<" id:"<<id<<endl;
        }
        else
        {
            break;
        } 


    }


    cout<<"完成调度任务"<<endl;

}
int main()
{
    signal(SIGINT, hander);

    
    for(int i=1;i<=NUM;i++)
    {
         id=fork();

        if(id==0)
        {
            int ret=10;
            while(ret)
            {
                cout<<"我是子进程:我的PID:"<<getpid()<<" PPID:"<<getppid()<<endl;
                sleep(1);
                ret--;
            }

            exit(1);
        }
        while(1)
        {
            sleep(1);
        }
    }
    return 0;
}






//关键字的使用
// volatile int flag = 0;

// void hander(int signum)
// {
//     cout << "改变flag" << endl;
//     flag = 1;
//     cout << "quit:" << flag << endl;
// }
// int main()
// {
//     signal(SIGINT, hander);
//     while (!flag)
//         ;
//     cout << "main,正常退出" << endl;
//     return 0;
// }